From 246a7ecbc97ed65362f08693bd994a59a12d2a7b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 2 Jul 2011 01:25:45 +0200 Subject: [PATCH] box: Remove cache for sibling paths We can't cache this path as widgets might dynamically add or remove style classes without telling us. At which point the stored path does not work. --- gtk/gtkbox.c | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c index ecf7bb16a5..c36b4df039 100644 --- a/gtk/gtkbox.c +++ b/gtk/gtkbox.c @@ -109,7 +109,6 @@ struct _GtkBoxPrivate GtkOrientation orientation; gint16 spacing; - GtkWidgetPath *sibling_path; guint default_expand : 1; guint homogeneous : 1; @@ -881,17 +880,19 @@ static GtkWidgetPath * gtk_box_get_path_for_child (GtkContainer *container, GtkWidget *child) { - GtkWidgetPath *path; + GtkWidgetPath *path, *sibling_path; GtkBox *box; GtkBoxPrivate *private; + GList *list, *children; box = GTK_BOX (container); private = box->priv; - if (private->sibling_path == NULL) + path = gtk_widget_path_copy (gtk_widget_get_path (GTK_WIDGET (container))); + + if (gtk_widget_get_visible (child)) { - GList *list, *children; - private->sibling_path = gtk_widget_path_new (); + sibling_path = gtk_widget_path_new (); /* get_children works in visible order */ children = gtk_container_get_children (container); @@ -904,17 +905,16 @@ gtk_box_get_path_for_child (GtkContainer *container, if (!gtk_widget_get_visible (list->data)) continue; - gtk_widget_path_append_for_widget (private->sibling_path, list->data); + gtk_widget_path_append_for_widget (sibling_path, list->data); } - g_list_free (children); - } + g_list_free (children); - path = gtk_widget_path_copy (gtk_widget_get_path (GTK_WIDGET (container))); - if (gtk_widget_get_visible (child)) - gtk_widget_path_append_with_siblings (path, - private->sibling_path, - gtk_box_get_visible_position (box, - child)); + gtk_widget_path_append_with_siblings (path, + sibling_path, + gtk_box_get_visible_position (box, + child)); + gtk_widget_path_unref (sibling_path); + } else gtk_widget_path_append_for_widget (path, child); @@ -924,17 +924,9 @@ gtk_box_get_path_for_child (GtkContainer *container, static void gtk_box_invalidate_order (GtkBox *box) { - GtkBoxPrivate *private = box->priv; - - if (private->sibling_path != NULL) - { - gtk_widget_path_unref (private->sibling_path); - private->sibling_path = NULL; - - gtk_container_foreach (GTK_CONTAINER (box), - (GtkCallback) gtk_widget_reset_style, - NULL); - } + gtk_container_foreach (GTK_CONTAINER (box), + (GtkCallback) gtk_widget_reset_style, + NULL); } static void -- 2.30.2